void main() {
  // print('你好 dart');
  var str = 'hello world';
  print(str);

  var num = 1234;
  print(num);

  String string = 'hello world';
  print(string);

  int number = 1234;
  print(number);

  const pi = 3.14159;
  // pi = 4.2; // 常量不可修改

  final pii = 3.34159;
  // pii = 2.3; // 常量不可修改

  // final是懒加载 使用时才初始化，即运行时才去初始化
  final aTime = new DateTime.now();
  // const bTime = new DateTime.now();


  String str1 = "Hello";
  String str2 = "World";

  print(str1 + " " + str2);
  print("$str1 $str2");

  var flag = true;
  if (flag) {
    print("真");
  } else {
    print("假");
  }





  // List
  var list1 = ["张三", 20, true];
  print(list1);
  print(list1.length);
  print(list1[0]);
  print(list1.first);
  print(list1.last);
  print(list1.indexOf(20));

  var list2 = <String>["aaa", "bbb"];
  print(list2);

  var list3 = <int>[12, 30];
  print(list3);
  list3.add(21);
  print(list3);

  var list4 = [];
  print(list4);
  print(list4.length);

  list4.add("张三");
  list4.add("李四");
  list4.add(20);
  print(list4);
  print(list4.length);

  var list5 = ["张三", 20, true];
  list5.add("李四");
  print(list5);

  var list6 = List.filled(2, ""); // 创建一个固定长度的集合
  print(list6);
  list6[0] = "张三";
  // list6[1] = "李四";
  print(list6);

  var list7 = ["张三", "李四"];
  print(list7.length);
  list7.length = 0;
  print(list7);

  var list8 = List<dynamic>.filled(2, ""); // dynamic可以填充任意类型的元素
  list8[0] = 1;
  print(list8);



  // Maps
  var person = {"name": "张三", "age": 20, "work": ["程序员", "快递员"]};
  print(person);
  print(person["name"]);
  print(person["lla"]);
  print(person["work"]);
  print((person["work"] as List)[0]);

  var map1 = new Map();
  map1["name"] = "张三";
  map1["age"] = 20;
  map1["work"] = ["程序员", "快递员"];
  print(map1);





  // 类型判断 is
  var str3 = "1234";
  if (str3 is String) {
    print("str3是string类型");
  } else if (str3 is int) {
    print("str3是int类型");
  } else {
    print("str3是其他类型");
  }

  // 算数运算符
  int test1 = 13;
  int test2 = 5;
  print(test1+test2); // 加
  print(test1-test2); // 减
  print(test1*test2); // 乘
  print(test1/test2); // 除
  print(test1%test2); // 取余
  print(test1~/test2); // 取整

  // 关系运算符
  print(test1==test2); // 判等
  print(test1!=test2); // 不等
  print(test1>test2); // 大于
  print(test1<test2); // 小于
  print(test1>=test2); // 大于等于
  print(test1<=test2); // 小于等于

  // 逻辑运算符
  bool test3 = true;
  print(!test3); // 取反

  bool test4 = false;
  print(test3 && test4); // 且

  print(test3 || test4); // 或

  // 赋值运算符
  int? test5;
  test5??=23; // 如果test5为空 ??= 把后面的值赋给test5
  print(test5);

  int test6 = 12;
  var test7 = 12.0;
  print(test6 += 10);
  print(test6 -= 10);
  print(test6 *= 10);
  print(test7 /= 10);
  test6 = 12;
  print(test6 %= 10);
  test6 = 12;
  print(test6 ~/= 10);


  // 条件表达式
  var score = 80;
  if (score > 80) {

  } else if(score> 70) {
    
  } else if (score >= 60) {

  } else {

  }

  var sex = "男";
  switch (sex) {
    case "男":
    print("男的");
    break;
    case "女":
    print("女的");
    break;
    default:
    print("不男不女的");
    break;
  }

  bool test8 = true;
  var test9 = test8 ? "我是true" : "我是false"; // 三目运算
  print(test9);

  var test10;
  var test11 = test10 ?? 10;
  print(test11);


  // 类型转换
  // Number与String类型之间的转换

  String test12 = "123";
  var test13 = int.parse(test12);
  print(test13);
  var test14 =test13.toString();
  print(test14);
}